// Package serialize provides a serialization structure to serialize and
// deserialize Signal objects into storeable and transportable bytes.
package serialize

import (
	record3 "sieve_engine/execute/whatsapp/lib/libsignal/groups/state/record"
	protocol2 "sieve_engine/execute/whatsapp/lib/libsignal/protocol"
	record2 "sieve_engine/execute/whatsapp/lib/libsignal/state/record"
)

// NewSerializer will return a new serializer object that will be used
// to encode/decode Signal objects into bytes.
func NewSerializer() *Serializer {
	return &Serializer{}
}

// Serializer is a structure to serialize Signal objects
// into bytes. This allows you to use any serialization format
// to store or send Signal objects.
type Serializer struct {
	SenderKeyRecord              record3.SenderKeySerializer
	SenderKeyState               record3.SenderKeyStateSerializer
	SignalMessage                protocol2.SignalMessageSerializer
	PreKeySignalMessage          protocol2.PreKeySignalMessageSerializer
	SenderKeyMessage             protocol2.SenderKeyMessageSerializer
	SenderKeyDistributionMessage protocol2.SenderKeyDistributionMessageSerializer
	SignedPreKeyRecord           record2.SignedPreKeySerializer
	PreKeyRecord                 record2.PreKeySerializer
	State                        record2.StateSerializer
	Session                      record2.SessionSerializer
}
